using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ConversionTools._TransitFeed
{
    /// <summary>
    /// <para>Connect Network Dataset Transit Sources To Streets</para>
    /// <para>Connects transit stops to street features for use in a transit-enabled network dataset. This tool creates the StopsOnStreets and StopConnectors feature classes defined by the Network Analyst public transit data model and is intended to be run as part of a larger workflow for creating a transit-network dataset described in Create and use a network dataset with public transit data.</para>
    /// <para>将公交停靠点连接到街道要素，以便在启用公交的网络数据集中使用。此工具将创建由 Network Analyst 公共交通数据模型定义的 StopsOnStreets 和 StopConnectors 要素类，并作为创建和使用具有公共交通数据的网络数据集中所述的创建公交网络数据集的更大工作流的一部分运行。</para>
    /// </summary>    
    [DisplayName("Connect Network Dataset Transit Sources To Streets")]
    public class ConnectNetworkDatasetTransitSourcesToStreets : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ConnectNetworkDatasetTransitSourcesToStreets()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_target_feature_dataset">
        /// <para>Target Feature Dataset</para>
        /// <para><xdoc>
        ///   <para>The feature dataset where the transit-enabled network dataset will be created. This feature dataset must already exist and contain a point feature class called Stops with the schema described by the Network Analyst public transit data model. A valid Stops feature class can be created with the GTFS To Network Dataset Transit Sources tool.</para>
        ///   <para>The Stops feature class may be altered after running the tool. Stop features with a GStopType value of 2, representing station entrances, may be deleted. These stop features will instead be included in the output StopsOnStreets feature class to model correct connections from the streets, through the station entrances, and to the stops. Parent stations that are spatially coincident with stops may also be deleted.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将在其中创建启用公交的网络数据集的要素数据集。此要素数据集必须已存在，并且包含名为 Stops 的点要素类，其方案由 Network Analyst 公共交通数据模型描述。可以使用 GTFS 转网络数据集传输源工具创建有效的停靠点要素类。</para>
        ///   <para>运行该工具后，可能会更改停靠点要素类。可以删除 GStopType 值为 2（表示车站入口）的停靠点要素。这些停靠点要素将包含在输出 StopsOnStreets 要素类中，以便对从街道、车站入口到停靠点的正确连接进行建模。在空间上与停靠点重合的父站也可以被删除。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_streets_features">
        /// <para>Input Streets Features</para>
        /// <para><xdoc>
        ///   <para>A polyline feature class of streets to which transit stops and lines will connect. This streets feature class should be the same feature class you intend to use in your transit-enabled network dataset for modeling pedestrians walking along streets. The feature class does not need to be in the target feature dataset to run this tool; however, the feature class must be in the target feature dataset at the time you create the network dataset.</para>
        ///   <para>The input streets features will be altered after running the tool. Vertices will be added at the locations where StopsOnStreets features intersect the streets. If you do not want your street data altered, make a copy of it before running this tool.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>公交停靠点和线路将连接到的街道的折线要素类。此街道要素类应与您打算在启用公交的网络数据集中使用的要素类相同，该要素类用于对沿街道行走的行人进行建模。要素类无需位于目标要素数据集中即可运行此工具;但是，在创建网络数据集时，要素类必须位于目标要素数据集中。</para>
        ///   <para>运行该工具后，输入街道要素将发生更改。将在 StopsOnStreets 要素与街道相交的位置添加折点。如果您不希望更改街道数据，请在运行此工具之前复制它。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_search_distance">
        /// <para>Search Distance</para>
        /// <para><xdoc>
        ///   <para>The search distance for snapping transit stops to the input street features. Stops that are outside the search distance will not be snapped and will not be connected to the streets. A small search distance will ensure that stops do not snap to streets that are far away, but it increases the likelihood of stops failing to snap when they should. A large search distance increases the number of stops likely to snap but may lead to errors that should instead be corrected by editing the street data. If no street features are found within the search distance of a particular stop, the output StopsOnStreets feature will not be snapped to a street and will be coincident with its corresponding feature in Stops, which could lead to poor connectivity in the network dataset at that location.</para>
        ///   <para>The default is 100 meters.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>捕捉公交停靠点到输入街道要素的搜索距离。搜索距离之外的停靠点不会被捕捉，也不会连接到街道。较小的搜索距离将确保停靠点不会捕捉到远处的街道，但它增加了停靠点在应该捕捉时无法捕捉的可能性。较大的搜索距离会增加可能捕捉的停靠点数量，但可能会导致错误，而应通过编辑街道数据来纠正错误。如果在特定停靠点的搜索距离内未找到街道要素，则输出的 StopsOnStreets 要素将不会捕捉到街道，并且将与停靠点中的相应要素重合，这可能会导致该位置的网络数据集中的连通性不佳。</para>
        ///   <para>默认值为 100 米。</para>
        /// </xdoc></para>
        /// </param>
        public ConnectNetworkDatasetTransitSourcesToStreets(object _target_feature_dataset, object _in_streets_features, string _search_distance)
        {
            this._target_feature_dataset = _target_feature_dataset;
            this._in_streets_features = _in_streets_features;
            this._search_distance = _search_distance;
        }
        public override string ToolboxName => "Conversion Tools";

        public override string ToolName => "Connect Network Dataset Transit Sources To Streets";

        public override string CallName => "conversion.ConnectNetworkDatasetTransitSourcesToStreets";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_target_feature_dataset, _in_streets_features, _search_distance, _expression, _updated_target_feature_dataset, _updated_in_streets_features, _updated_in_stops, _output_stops_on_streets, _output_stop_connectors];

        /// <summary>
        /// <para>Target Feature Dataset</para>
        /// <para><xdoc>
        ///   <para>The feature dataset where the transit-enabled network dataset will be created. This feature dataset must already exist and contain a point feature class called Stops with the schema described by the Network Analyst public transit data model. A valid Stops feature class can be created with the GTFS To Network Dataset Transit Sources tool.</para>
        ///   <para>The Stops feature class may be altered after running the tool. Stop features with a GStopType value of 2, representing station entrances, may be deleted. These stop features will instead be included in the output StopsOnStreets feature class to model correct connections from the streets, through the station entrances, and to the stops. Parent stations that are spatially coincident with stops may also be deleted.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将在其中创建启用公交的网络数据集的要素数据集。此要素数据集必须已存在，并且包含名为 Stops 的点要素类，其方案由 Network Analyst 公共交通数据模型描述。可以使用 GTFS 转网络数据集传输源工具创建有效的停靠点要素类。</para>
        ///   <para>运行该工具后，可能会更改停靠点要素类。可以删除 GStopType 值为 2（表示车站入口）的停靠点要素。这些停靠点要素将包含在输出 StopsOnStreets 要素类中，以便对从街道、车站入口到停靠点的正确连接进行建模。在空间上与停靠点重合的父站也可以被删除。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Feature Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_feature_dataset { get; set; }


        /// <summary>
        /// <para>Input Streets Features</para>
        /// <para><xdoc>
        ///   <para>A polyline feature class of streets to which transit stops and lines will connect. This streets feature class should be the same feature class you intend to use in your transit-enabled network dataset for modeling pedestrians walking along streets. The feature class does not need to be in the target feature dataset to run this tool; however, the feature class must be in the target feature dataset at the time you create the network dataset.</para>
        ///   <para>The input streets features will be altered after running the tool. Vertices will be added at the locations where StopsOnStreets features intersect the streets. If you do not want your street data altered, make a copy of it before running this tool.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>公交停靠点和线路将连接到的街道的折线要素类。此街道要素类应与您打算在启用公交的网络数据集中使用的要素类相同，该要素类用于对沿街道行走的行人进行建模。要素类无需位于目标要素数据集中即可运行此工具;但是，在创建网络数据集时，要素类必须位于目标要素数据集中。</para>
        ///   <para>运行该工具后，输入街道要素将发生更改。将在 StopsOnStreets 要素与街道相交的位置添加折点。如果您不希望更改街道数据，请在运行此工具之前复制它。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Streets Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_streets_features { get; set; }


        /// <summary>
        /// <para>Search Distance</para>
        /// <para><xdoc>
        ///   <para>The search distance for snapping transit stops to the input street features. Stops that are outside the search distance will not be snapped and will not be connected to the streets. A small search distance will ensure that stops do not snap to streets that are far away, but it increases the likelihood of stops failing to snap when they should. A large search distance increases the number of stops likely to snap but may lead to errors that should instead be corrected by editing the street data. If no street features are found within the search distance of a particular stop, the output StopsOnStreets feature will not be snapped to a street and will be coincident with its corresponding feature in Stops, which could lead to poor connectivity in the network dataset at that location.</para>
        ///   <para>The default is 100 meters.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>捕捉公交停靠点到输入街道要素的搜索距离。搜索距离之外的停靠点不会被捕捉，也不会连接到街道。较小的搜索距离将确保停靠点不会捕捉到远处的街道，但它增加了停靠点在应该捕捉时无法捕捉的可能性。较大的搜索距离会增加可能捕捉的停靠点数量，但可能会导致错误，而应通过编辑街道数据来纠正错误。如果在特定停靠点的搜索距离内未找到街道要素，则输出的 StopsOnStreets 要素将不会捕捉到街道，并且将与停靠点中的相应要素重合，这可能会导致该位置的网络数据集中的连通性不佳。</para>
        ///   <para>默认值为 100 米。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Search Distance")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string _search_distance { get; set; }


        /// <summary>
        /// <para>Expression</para>
        /// <para>An SQL expression used to select a subset of input street feature records. Transit stops will be snapped only to street features matching this expression. For example, the expression could be used to prevent stops from snapping to streets where pedestrian travel is prohibited.</para>
        /// <para>用于选择输入街道要素记录子集的 SQL 表达式。公交停靠点将仅捕捉到与此表达式匹配的街道要素。例如，该表达式可用于防止停靠点卡在禁止行人通行的街道上。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _expression { get; set; } = null;


        /// <summary>
        /// <para>Updated Target Feature Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Target Feature Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_target_feature_dataset { get; set; }


        /// <summary>
        /// <para>Updated Input Streets Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Streets Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_in_streets_features { get; set; }


        /// <summary>
        /// <para>Updated Input Stops</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Stops")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_in_stops { get; set; }


        /// <summary>
        /// <para>Output Stops On Streets</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Stops On Streets")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_stops_on_streets { get; set; }


        /// <summary>
        /// <para>Output Stop Connectors</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Stop Connectors")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_stop_connectors { get; set; }


        public ConnectNetworkDatasetTransitSourcesToStreets SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}